home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
fb386
/
lib
/
blb
/
window.blb
< prev
Wrap
Text File
|
1995-02-15
|
10KB
|
171 lines
60800 '-------------------- Windowライブラリ version 1.30 (16色画面用) ---------------------
60801 *BLB_WIN_INIT
60802 '入力 BLB_RESO_X ・・・ 画面解像度(横ドット数)
60803 ' BLB_RESO_Y ・・・ 画面解像度(縦ドット数)
60804 ' BLB_WIN_MAX ・・・ 最大ウィンドウ数(255未満・0のとき自動設定)
60805 VIEW(0,0)-(BLB_RESO_X-1,BLB_RESO_Y-1):WINDOW(0,0)-(BLB_RESO_X-1,BLB_RESO_Y-1)
60806 COLOR 7,0,7,4:CONSOLE 0,25,0:LINE(0,-(BLB_MENUBAR_XLONG%>0)*20)-(1023,767),PSET,%6,BF
60807 MOUSEPAT=0:GOSUB *BLB_MOUSEPAT
60808 BLB_WINMEM&=BLB_RESO_X*BLB_RESO_Y/4
60809 IF BLB_WIN_MAX=0 THEN BLB_WIN_MAX=((FRE(3)-200000)*.8!)\BLB_WINMEM&*2
60810 BLB_WIN$="":BLB_WIN_EXIST$=STRING$(BLB_WIN_MAX,"0")
60811 BLB_MEM%(0)=9:ERASE BLB_MEM%:BLB_WINPTN%(0)=0:ERASE BLB_WINPTN%
60812 DIM BLB_WIN%(BLB_WIN_MAX,9),BLB_WINTITLE$(BLB_WIN_MAX),BLB_MEM%(78000)
60813 DIM BLB_WINPTN%(BLB_WINMEM&*(BLB_WIN_MAX+1)-1)
60814 RETURN
60815 *BLB_WIN_POS
60816 IF BLB_WIN$="" THEN W=-1:RETURN
60817 FOR I%=1 TO LEN(BLB_WIN$):A%=ASC(MID$(BLB_WIN$,I%,1))-1
60818 IF X<BLB_WIN%(A%,0) OR X>=BLB_WIN%(A%,0)+BLB_WIN%(A%,2) OR Y<BLB_WIN%(A%,1) OR Y>=BLB_WIN%(A%,1)+BLB_WIN%(A%,3) THEN NEXT:W=-1:RETURN
60819 I%=256:NEXT:W=A%+1:GOSUB *BLB_WIN_WSET:X=X-W(0):Y=Y-W(1):RETURN
60820 *BLB_WIN_OPEN
60821 IF LEN(BLB_WIN$)=BLB_WIN_MAX THEN W=-1:RETURN
60822 W=INSTR(BLB_WIN_EXIST$,"0"):BLB_WIN$=CHR$(W)+BLB_WIN$
60823 FOR I%=0 TO 9:BLB_WIN%(W-1,I%)=W(I%):NEXT:BLB_WINTITLE$(W-1)=W$
60824 MID$(BLB_WIN_EXIST$,W,1)="1":GOSUB *BLB_WIN_DRAW:RETURN
60825 *BLB_WIN_CLOSE
60826 IF BLB_WIN$="" THEN RETURN
60827 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET
60828 BLB_V%(0)=W(0):BLB_V%(1)=W(1):BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
60829 GOSUB *BLB_WIN_BACKDRAW
60830 MID$(BLB_WIN_EXIST$,W,1)="0":BLB_WIN$=MID$(BLB_WIN$,2)
60831 RETURN
60832 *BLB_WIN_MOVE
60833 IF BLB_WIN$="" THEN RETURN
60834 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:BLB_WIN%(W-1,0)=X:BLB_WIN%(W-1,1)=Y
60835 GET@A(W(0),W(1))-(W(0)+W(2)-1,W(1)+W(3)-1),BLB_WINPTN%,BLB_WINMEM&*(W-1)
60836 IF W(0)<0 OR W(0)+W(2)>BLB_RESO_X OR W(1)+W(3)>BLB_RESO_Y THEN
60837 BLB_MEM%(0)=X:BLB_MEM%(1)=Y:FOR I%=0 TO 9:BLB_MEM%(I+2)=W(I%):NEXT
60838 GOSUB *BLB_WIN_DRAW:X=BLB_MEM%(0):Y=BLB_MEM%(1)
60839 FOR I%=0 TO 9:W(I%)=BLB_MEM%(I+2):NEXT
60840 ELSE
60841 PUT@A(X,Y)-(X+W(2)-1,Y+W(3)-1),BLB_WINPTN%,,,,,BLB_WINMEM&*(W-1)
60842 ENDIF
60843 BLB_V%(0)=W(0):BLB_V%(2)=W(0)+W(2)-1
60844 IF ABS(W(0)-X)>=W(2) OR ABS(W(1)-Y)>W(3)-2 THEN
60845 BLB_V%(1)=W(1):BLB_V%(3)=W(1)+W(3)-1:GOSUB *BLB_WIN_BACKDRAW
60846 ELSE
60847 FOR I%=0 TO 3:BLB_MEM%(I%)=W(I%):NEXT
60848 IF Y<W(1) THEN
60849 BLB_V%(1)=Y+W(3)-1:BLB_V%(3)=W(1)+W(3)-1:GOSUB *BLB_WIN_BACKDRAW
60850 ELSE IF Y>W(1) THEN
60851 BLB_V%(1)=W(1):BLB_V%(3)=Y:GOSUB *BLB_WIN_BACKDRAW
60852 ENDIF
60853 FOR I%=0 TO 3:W(I%)=BLB_MEM%(I%):NEXT
60854 IF Y<W(1) THEN BLB_V%(1)=W(1):BLB_V%(3)=Y+W(3)-1 ELSE BLB_V%(1)=Y:BLB_V%(3)=W(1)+W(3)-1
60855 IF X>W(0) THEN
60856 BLB_V%(0)=W(0):BLB_V%(2)=X:GOSUB *BLB_WIN_BACKDRAW
60857 ELSE IF X<W(0) THEN
60858 BLB_V%(0)=X+W(2)-1:BLB_V%(2)=W(0)+W(2)-1:GOSUB *BLB_WIN_BACKDRAW
60859 ENDIF
60860 ENDIF
60861 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),PSET,%8,B
60862 RETURN
60863 *BLB_WIN_SIZE
60864 IF BLB_WIN$="" THEN RETURN
60865 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:IF W(2)=X AND W(3)=Y THEN RETURN
60866 IF X<W(4) OR X>W(6) OR Y<W(5) OR Y>W(7) THEN RETURN
60867 BLB_WIN%(W-1,2)=X:BLB_WIN%(W-1,3)=Y:BLB_V%(0)=W(2):BLB_V%(1)=W(3):GOSUB *BLB_WIN_DRAW
60868 W(2)=BLB_V%(0):W(3)=BLB_V%(1):IF X>=W(2) AND Y>=W(3) THEN RETURN
60869 IF X>=W(2) AND Y<W(3) THEN
60870 BLB_V%(0)=W(0):BLB_V%(1)=W(1)+Y-1:BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
60871 ELSE IF X<W(2) AND Y>=W(3) THEN
60872 BLB_V%(0)=W(0)+X-1:BLB_V%(1)=W(1):BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
60873 ELSE IF X<W(2) AND Y<W(3) THEN
60874 BLB_V%(0)=W(0):BLB_V%(1)=W(1)+Y-1:BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
60875 A%=W(2):GOSUB *BLB_WIN_BACKDRAW
60876 BLB_V%(0)=W(0)+X-1:BLB_V%(1)=W(1):BLB_V%(2)=W(0)+A%-1:BLB_V%(3)=W(1)+Y-1
60877 ENDIF
60878 GOSUB *BLB_WIN_BACKDRAW:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),PSET,%8,B:RETURN
60879 *BLB_WIN_CHANGE
60880 IF BLB_WIN$="" THEN RETURN
60881 IF W<1 OR W>BLB_WIN_MAX OR W=ASC(BLB_WIN$) THEN RETURN
60882 I%=INSTR(BLB_WIN$,CHR$(W)):IF I%=0 THEN RETURN
60883 BLB_WIN$=CHR$(W)+LEFT$(BLB_WIN$,I%-1)+MID$(BLB_WIN$,I%+1)
60884 PUT@A(W(0),W(1))-(W(0)+W(2)-1,W(1)+W(3)-1),BLB_WINPTN%,,,,,BLB_WINMEM&*(W-1):RETURN
60885 *BLB_WIN_DRAW
60886 GOSUB *BLB_WIN_WSET
60887 MOUSE 1,,,0:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),PSET,%8,BF,7
60888 LINE(W(0),W(1))-STEP(W(2)-1,15),PSET,%8,BF
60889 LINE(W(0)+LEN(BLB_WINTITLE$(W-1))*6+40,W(1)+1)-(W(0)+W(2)-2,W(1)+14),PSET,1,BF
60890 CONNECT(W(0),W(1)+W(3)-2)-STEP(W(2)-3,0)-STEP(0,2-W(3))-STEP(1,0)-STEP(0,W(3)-2),%8
60891 SYMBOL(W(0)+24,W(1)+2),BLB_WINTITLE$(W-1),.75!,.75!,7
60892 IF (W(8) AND 2)=0 THEN
60893 LINE(W(0)+2,W(1)+2)-STEP(11,11),PSET,7,BF,%6
60894 LINE STEP(0,0)-STEP(-11,-11),PSET,7:LINE STEP(11,0)-STEP(-11,11),PSET,7
60895 ENDIF
60896 GOSUB *BLB_WIN_USERDRAW:GOSUB *BLB_WIN_GTOMEM:MOUSE 1,,,1:RETURN
60897 *BLB_WIN_BACKDRAW
60898 IF BLB_V%(0)<0 THEN IF BLB_V%(2)<1 THEN RETURN ELSE BLB_V%(0)=0
60899 IF BLB_V%(1)<0 THEN BLB_V%(1)=0 ELSE IF BLB_V%(1)>BLB_RESO_Y-2 THEN RETURN
60900 IF BLB_V%(0)>BLB_RESO_X-2 THEN RETURN
60901 IF BLB_V%(2)>BLB_RESO_X-2 THEN BLB_V%(2)=BLB_RESO_X-1
60902 IF BLB_V%(3)>BLB_RESO_Y-2 THEN BLB_V%(3)=BLB_RESO_Y-1
60903 MOUSE 1,,,0:VIEW(BLB_V%(0),BLB_V%(1))-(BLB_V%(2),BLB_V%(3)),%6
60904 WINDOW(BLB_V%(0),BLB_V%(1))-(BLB_V%(2),BLB_V%(3))
60905 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:I%=LEN(BLB_WIN$)
60906 WHILE I%>1:W=ASC(MID$(BLB_WIN$,I%,1))-1:I%=I%-1
60907 PUT@A(BLB_WIN%(W,0)-BLB_V%(0),BLB_WIN%(W,1)-BLB_V%(1))-(BLB_WIN%(W,0)+BLB_WIN%(W,2)-1-BLB_V%(0),BLB_WIN%(W,1)+BLB_WIN%(W,3)-1-BLB_V%(1)),BLB_WINPTN%,,,,,BLB_WINMEM&*W
60908 WEND
60909 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:VIEW:WINDOW:MOUSE 1,,,1:RETURN
60910 *BLB_WIN_WSET
60911 FOR I%=0 TO 9:W(I%)=BLB_WIN%(W-1,I%):NEXT:RETURN
60912 *BLB_WIN_GTOMEM
60913 W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET
60914 GET@A(W(0),W(1))-(W(0)+W(2)-1,W(1)+W(3)-1),BLB_WINPTN%,BLB_WINMEM&*(W-1):RETURN
60915 *BLB_WIN_WORK
60916 IF MOUSE(2,0)=0 OR BLB_WIN$="" THEN RETURN
60917 X=MOUSE(0):Y=MOUSE(1):GOSUB *BLB_WIN_POS:IF W<0 THEN WHILE MOUSE(2,0):WEND:RETURN
60918 IF W<>ASC(BLB_WIN$) THEN GOSUB *BLB_WIN_CHANGE:RETURN
60919 IF X>W(2)-4 OR Y<16 OR Y>W(3)-3 THEN
60920 IF X>0 AND Y>1 AND X<13 AND Y<14 AND (W(8) AND 2)=0 THEN
60921 B%=0:WHILE MOUSE(2,0):X=MOUSE(0)-W(0):Y=MOUSE(1)-W(1)
60922 A%=(X>1)*(X<13)*(Y>1)*(Y<13)
60923 IF A%<>B% THEN LINE(W(0)+2,W(1)+2)-STEP(11,11),XOR,%7,BF:B%=A%
60924 WEND:IF B%=1 THEN GOSUB *BLB_WIN_CLOSE
60925 ELSE IF Y<16 AND (W(8)AND 1)=0 THEN
60926 MOUSEPAT=3:GOSUB *BLB_MOUSEPAT
60927 MOUSE 4,0,Y-(BLB_MENUBAR_XLONG%>0)*20,BLB_RESO_X-1,BLB_RESO_Y-9
60928 LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),XOR,%7,B
60929 C%=X:D%=Y:WHILE MOUSE(2,0):A%=MOUSE(0)-W(0):B%=MOUSE(1)-W(1)
60930 IF A%<>C% OR B%<>D% THEN
60931 LINE(W(0)-X+C%,W(1)-Y+D%)-STEP(W(2)-1,W(3)-1),XOR,%7,B:C%=A%:D%=B%
60932 LINE(W(0)-X+C%,W(1)-Y+D%)-STEP(W(2)-1,W(3)-1),XOR,%7,B
60933 ENDIF
60934 WEND:LINE(W(0)-X+C%,W(1)-Y+D%)-STEP(W(2)-1,W(3)-1),XOR,%7,B
60935 MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1
60936 IF X<>C% OR Y<>D% THEN X=W(0)-X+C%:Y=W(1)-Y+D%:GOSUB *BLB_WIN_MOVE
60937 ELSE IF (X>W(2)-4 OR Y>W(3)-3) AND (W(8) AND 4)=0 THEN
60938 A%=W(0)+W(4)+X-W(2)+1:B%=W(1)+W(5)+Y-W(3):C%=W(0)+W(6)+X-W(2):D%=W(1)+W(7)+Y-W(3)
60939 A%=-A%*(A%>=0):B%=-B%*(B%>=0):IF C%>BLB_RESO_X-2 THEN C%=BLB_RESO_X-1
60940 IF D%>BLB_RESO_Y-2 THEN D%=BLB_RESO_Y-1
60941 MOUSEPAT=4:GOSUB *BLB_MOUSEPAT:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),XOR,%7,B
60942 MOUSE 4,A%,B%,C%,D%:C%=X:D%=Y:WHILE MOUSE(2,0):A%=MOUSE(0)-W(0):B%=MOUSE(1)-W(1)
60943 IF A%<>C% OR B%<>D% THEN
60944 LINE(W(0),W(1))-STEP(W(2)-X+C%-1,W(3)-Y+D%-1),XOR,%7,B:C%=A%:D%=B%
60945 LINE(W(0),W(1))-STEP(W(2)-X+C%-1,W(3)-Y+D%-1),XOR,%7,B
60946 ENDIF
60947 WEND:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:LINE(W(0),W(1))-STEP(W(2)-X+C%-1,W(3)-Y+D%-1),XOR,%7,B
60948 MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1:X=W(2)-X+C%:Y=W(3)-Y+D%:GOSUB *BLB_WIN_SIZE
60949 ENDIF
60950 ELSE
60951 GOSUB *BLB_WIN_USER:WHILE MOUSE(2,0):WEND
60952 ENDIF
60953 RETURN
60954 *BLB_WIN_USER
60955 '┌───────────────────────────────────┐
60956 '│以下に、ウィンドウ内がマウスでクリックされた場合に行う処理を │
60957 '│記述してください。 │
60958 '│ウィンドウの座標は(W(0),W(1))~(W(0)+W(2)-1,W(1)+W(3)-1)です。 │
60959 '│ウィンドウについての情報は登録時と同じ形式で W() に収録されています。 │
60960 '└───────────────────────────────────┘
60980 RETURN
60981 *BLB_WIN_USERDRAW
60982 '┌───────────────────────────────────┐
60983 '│以下に、ウィンドウ内に描画するルーチンを記述してください。 │
60984 '│ウィンドウの座標は(W(0),W(1))~(W(0)+W(2)-1,W(1)+W(3)-1)です。 │
60985 '│ウィンドウについての情報は登録時と同じ形式で W() に収録されています。 │
60986 '│ (例) SYMBOL(W(0)+16,W(1)+32),STR$(W),3,3,3 │
60987 '└───────────────────────────────────┘
60999 RETURN